<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
		<head>
			<!-- template designed by Marco Von Ballmoos -->
			<title>Main Features Overview</title>
			<link rel="stylesheet" href="../media/stylesheet.css" />
			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
		</head>
		<body>
			<div class="page-body">			
	<table class="tutorial-nav-box">
	<tr>
		<td style="width: 30%">
							<a href="../psa/tutorial_psa.pkg.html"><img src="../media/images/previous_button.png" alt="Previous"></a>
					</td>
		<td style="text-align: center">
					</td>
		<td style="text-align: right; width: 30%">
							<a href="../psa/tutorial_psa_quick_start.pkg.html"><img src="../media/images/next_button.png" alt="Next"></a>
					</td>
	</tr>
	<tr>
		<td style="width: 30%">
							<span class="detail">Preface</span>
					</td>
		<td style="text-align: center">
					</td>
		<td style="text-align: right; width: 30%">
							<span class="detail">Quick Start</span>
					</td>
	</tr>
</table>
	
<div><a name=""></a><div class="ref-title-box"><h1 class="ref-title">Main Features Overview</h1>
    <h2 class="ref-purpose"></h2></div><div class="ref-synopsis"></div> <h1 class="title">Table of Contents</h1>
<ul class="toc">
	
			
					<li><a href="../psa/tutorial_psa_features.pkg.html#plugins">Plugins</a></li>
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#mvc">Model-View-Controller application design (MVC)</a></li>
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#usersgroups">Users and groups</a></li>
					
				  				<ul class="toc">
					<li><a href="../psa/tutorial_psa_features.pkg.html#usersgroups.custprop">Saving custom user and group properties</a></li>
						
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#usersgroups.orm">Object relational mapping (ORM) feature</a></li>
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#usersgroups.sessionsave">Saving user object into session</a></li>
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#usersgroups.tags">Tags per group</a></li>
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#usersgroups.acl">Access control list (ACL) or permissions</a></li>
					
				  															</ul>
						<li><a href="../psa/tutorial_psa_features.pkg.html#logging">Logging and basic profiling</a></li>
																				
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#templates">Template engine</a></li>
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#validation">Input validation</a></li>
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#developmode">Develop mode</a></li>
					
					<li><a href="../psa/tutorial_psa_features.pkg.html#requestinfo">Request info</a></li>
					</ul>
 <span><a name="plugins"></a><h2 class="title">Plugins</h2><p>PSA plugin is nothing more than a class that extends one of the <em class = "italic">Psa_Plugin</em> classes. You can see all <em class = "italic">Psa_Plugin</em> classes in section 'plugins' of this documentation. PSA registers plugins - collects some information about each class that extends <em class = "italic">Psa_Plugin</em> class and stores it to the database. Classes that extend same <em class = "italic">Psa_Plugin</em> class will be considered as plugins of the same type. You write your application based on PSA by extending <em class = "italic">Psa_Plugin</em> classes. Also you can write your own <em class = "italic">Psa_Plugin</em> classes. You call (execute) plugins by calling methods in your plugin classes. That is done by <a href="../psa/_scripts---functions.php.html#functionpsa_run_plugins">psa_run_plugins()</a> function. For example, many times my application needed to do something after user is authorized and for that you can make <em class = "italic">After_User_Authorize</em> plugin by extending <a href="../psa/plugins/Psa_Plugin_After_User_Authorize.html">Psa_Plugin_After_User_Authorize</a> class. If you need to add some more action after authorization you can make more <em class = "italic">After_User_Authorize</em> plugins. See documentation about each <em class = "italic">Psa_Plugin</em> class for more details.</p></span><span><a name="mvc"></a><h2 class="title">Model-View-Controller application design (MVC)</h2><p>You make application based on PSA by extending <em class = "italic">Psa_Plugin</em> classes. You write models, views and controllers by extending <a href="../psa/plugins/Psa_Plugin_Model.html">Psa_Plugin_Model</a>, <a href="../psa/plugins/Psa_Plugin_View.html">Psa_Plugin_View</a> and <a href="../psa/plugins/Psa_Plugin_Controller.html">Psa_Plugin_Controller</a> classes. See examples <a href="../psa/tutorial_psa_quick_start.pkg.html#exampleapp1">here</a>. Read more about MVC <a href="http://en.wikipedia.org/wiki/Model-view-controller">here</a>. The following diagram displays PSA's MVC workflow:</p>
    <pre>                                                   ___________________
  _______        ________       ____________      |       Action      |
 /       \      |        |     |            |     |  _______  ______  |
( Request )----&gt;| Router |----&gt;| Controller |----&gt;| |       ||      | |
 \_______/      |________|     |____________|     | | Model || View | |
                                                  | |_______||______| |
                                                  |___________________|</pre></span><span><a name="usersgroups"></a><h2 class="title">Users and groups</h2><p>In most of my web applications I had to deal with users, groups of users, settings and permissions per user and groups and similar so I've included two classes in PSA (<a href="../psa/Psa_User.html">Psa_User</a> and <a href="../psa/Psa_Group.html">Psa_Group</a>) for managing users and groups. Here are the most interesting features they provide:</p>
    <span><a name="usersgroups.custprop"></a><h3 class="title">Saving custom user and group properties</h3><p>You can simply save to database any property you assign to user or group object and it will be restored when you make object instance for the same user or group on the next request. See example:</p>
      <div class="src-code"><ol><li><div class="src-line"><span class="src-php">&lt;?php</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-comm">//&nbsp;user&nbsp;object</span></div></li>
<li><div class="src-line"><span class="src-var">$user&nbsp;</span>=&nbsp;<span class="src-key">new&nbsp;</span><span class="src-id"><a href="../psa/Psa_User.html">Psa_User</a></span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-comm">//&nbsp;set&nbsp;username&nbsp;&amp;&nbsp;password</span></div></li>
<li><div class="src-line"><span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">username&nbsp;</span>=&nbsp;<span class="src-str">'john'</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">password&nbsp;</span>=&nbsp;<span class="src-str">'fish'</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-comm">//&nbsp;if&nbsp;user&nbsp;is&nbsp;authorized&nbsp;save&nbsp;some&nbsp;custom&nbsp;properties</span></div></li>
<li><div class="src-line"><span class="src-key">if</span><span class="src-sym">(</span><span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">authorize</span><span class="src-sym">(</span><span class="src-sym">))</span><span class="src-sym">{</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">favourite_food&nbsp;</span>=&nbsp;<span class="src-str">'potato'</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">favourite_drink&nbsp;</span>=&nbsp;<span class="src-key">array</span><span class="src-sym">(</span><span class="src-str">'cola'</span><span class="src-sym">,</span><span class="src-str">'bear'</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">save</span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><span class="src-sym">}</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-php">?&gt;</span></div></li>
</ol></div>
      <p>When you authorize the user on the next request it will have <em class = "italic">favourite_food</em> and <em class = "italic">favourite_drink</em> properties. The same is valid for <a href="../psa/Psa_Group.html">Psa_Group</a> object. This is very flexible because you don't have to put every property in the separate database column, and you can add any number of properties to user or group. It is also very easy to update values later and save again.</p></span>
    <span><a name="usersgroups.orm"></a><h3 class="title">Object relational mapping (ORM) feature</h3><p>If you need that some property of user or group is saved in its own database column, for example for database join operation, just add new column into <em class = "italic">psa_user</em> or <em class = "italic">psa_group</em> database table and everything else is the same as in the example above. For example, if you add a new database column named <em class = "italic">favourite_food</em> to <em class = "italic">psa_user</em> database table and if the column can accept some text value (like varchar or text) then on <a href="../psa/Psa_User.html#methodsave">save()</a>, <em class = "italic">favourite_food</em> property will be automatically saved into this new column and text '<em class = "italic">potato</em>' will be inserted in it. So you work only with object properties and PSA takes care where to save them or restore from.</p></span>
    <span><a name="usersgroups.sessionsave"></a><h3 class="title">Saving user object into session</h3><p>Usually data (user properties) about logged-in user have to be restored on every request. For example, if some user signs up into your application you can save complete user object into session and restore it on the next request from session without need to query the database. This is very easy to do with <a href="../psa/Psa_User.html#methodsession_save">session_save()</a> and <a href="../psa/Psa_User.html#methodsession_restore">session_restore()</a> methods. See an example:</p>
      <div class="src-code"><ol><li><div class="src-line"><span class="src-php">&lt;?php</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-comm">//&nbsp;user&nbsp;object</span></div></li>
<li><div class="src-line"><span class="src-var">$user&nbsp;</span>=&nbsp;<span class="src-key">new&nbsp;</span><span class="src-id"><a href="../psa/Psa_User.html">Psa_User</a></span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-comm">//&nbsp;try&nbsp;to&nbsp;restore&nbsp;user&nbsp;object&nbsp;from&nbsp;session&nbsp;and&nbsp;if&nbsp;not&nbsp;successful</span></div></li>
<li><div class="src-line"><span class="src-comm">//&nbsp;authorize&nbsp;user&nbsp;and&nbsp;store&nbsp;object&nbsp;into&nbsp;session</span></div></li>
<li><div class="src-line"><span class="src-key">if</span><span class="src-sym">(</span><span class="src-sym">!</span><span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">session_restore</span><span class="src-sym">(</span><span class="src-sym">))</span><span class="src-sym">{</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">username&nbsp;</span>=&nbsp;<span class="src-var">$_POST</span><span class="src-sym">[</span><span class="src-str">'login_user'</span><span class="src-sym">]</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">password&nbsp;</span>=&nbsp;<span class="src-var">$_POST</span><span class="src-sym">[</span><span class="src-str">'login_pass'</span><span class="src-sym">]</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;authorize&nbsp;user</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">if</span><span class="src-sym">(</span><span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">authorize</span><span class="src-sym">(</span><span class="src-sym">))</span><span class="src-sym">{</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;save&nbsp;user&nbsp;object&nbsp;into&nbsp;session</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$user</span><span class="src-sym">-&gt;</span><span class="src-id">session_save</span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">}</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;if&nbsp;user&nbsp;not&nbsp;authorized</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">else</span><span class="src-sym">{</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;...&nbsp;go&nbsp;to&nbsp;login&nbsp;form&nbsp;and&nbsp;show&nbsp;error&nbsp;message</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">}</span></div></li>
<li><div class="src-line"><span class="src-sym">}</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-comm">//&nbsp;...&nbsp;user&nbsp;is&nbsp;authorized,&nbsp;do&nbsp;something</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-php">?&gt;</span></div></li>
</ol></div>
      <p>In this example, after successful authorization user object will be stored into session and on next request will be restored from session.</p></span>
    <span><a name="usersgroups.tags"></a><h3 class="title">Tags per group</h3><p>Tags are just marks or flags that are assigned to some group. They are assigned to group by <a href="../psa/Psa_Group.html#methodadd_tag">add_tag()</a> and removed by <a href="../psa/Psa_Group.html#methodremove_tag">remove_tag()</a> method. Tags are nothing more than string values. For example 'download_allowed' can be tag. So you can use tags for whatever you need in your application. Difference from ordinary group object properties (example: $group-&gt;admin = 1) is that user will have all tags from all his groups. See <a href="../psa/Psa_User.html#methodset_tags">Psa_User::set_tags()</a> method. Tags are very suitable for permissions but can be used for many purposes.</p></span>
    <span><a name="usersgroups.acl"></a><h3 class="title">Access control list (ACL) or permissions</h3><p>There are no special methods in PSA which handles user permissions or ACL. But you can assign any property to user object (example: $user-&gt;can_wrte_to_database = true) or to group object, and there are tags per groups you can use for permissions. So you really have lots of combinations how to handle permissions in your application. By my experience every application is somehow different regarding user permissions and often they are not complicated to implement especially when you have options above mentioned.</p></span></span><span><a name="logging"></a><h2 class="title">Logging and basic profiling</h2><p>If logging is enabled in main configuration file (<a href="../psa/_config.php.html">config.php</a>) many events will be logged. Logs are very important while developing to help you debugging and profiling, and after in production to see what users actually doing with your application. For example, PSA will log user authorization, group and user deletion, missing plugin, group changing, errors, exceptions, notes. There is also profile log which will log execution times of called plugin methods. Logs are by default written to database but can be also written to file. When you collect appropriate amount of data in logs you can run various SQL queries to get interesting data about your application like which methods are mostly invoked, which takes the most execution time and are candidates for optimization.</p></span><span><a name="templates"></a><h2 class="title">Template engine</h2><p>With PSA is included <a href="http://www.smarty.net">Smarty</a> template engine. I have been using it lately and decided to include it in PSA cause my future applications will use Smarty. There is also a <a href="../psa/Psa_Dully.html">Psa_Dully</a> class I used before Smarty which is very simple template engine. See documentation of both for details.</p></span><span><a name="validation"></a><h2 class="title">Input validation</h2><p><a href="../psa/Psa_Validator.html">Psa_Validator</a> class is used for user input validation. This is simple class that can validate common input types like integers, dates, strings, emails, ip addresses, numbers and arrays of those types. See documentation for more details. Here is a simple example.</p>
    <div class="src-code"><ol><li><div class="src-line"><span class="src-php">&lt;?php</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-key">function&nbsp;</span><span class="src-id">my_method</span><span class="src-sym">(</span><span class="src-var">$param1</span><span class="src-sym">,&nbsp;</span><span class="src-var">$param2</span><span class="src-sym">,&nbsp;</span><span class="src-var">$param3</span><span class="src-sym">)</span><span class="src-sym">{</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;validator&nbsp;object</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$validator&nbsp;</span>=&nbsp;<span class="src-key">new&nbsp;</span><span class="src-id"><a href="../psa/Psa_Validator.html">Psa_Validator</a></span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;values&nbsp;to&nbsp;validate</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$validator</span><span class="src-sym">-&gt;</span><span class="src-id">add_required</span><span class="src-sym">(</span><span class="src-var">$param1</span><span class="src-sym">,</span><span class="src-str">'string'</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$validator</span><span class="src-sym">-&gt;</span><span class="src-id">add_required</span><span class="src-sym">(</span><span class="src-var">$param2</span><span class="src-sym">,</span><span class="src-str">'float_array'</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$validator</span><span class="src-sym">-&gt;</span><span class="src-id">add_optional</span><span class="src-sym">(</span><span class="src-var">$param3</span><span class="src-sym">,</span><span class="src-str">'int'</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;validate&nbsp;input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$validator</span><span class="src-sym">-&gt;</span><span class="src-id">validate</span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></li>
<li><div class="src-line">&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;...&nbsp;do&nbsp;something&nbsp;if&nbsp;validation&nbsp;is&nbsp;successful</span></div></li>
<li><div class="src-line"><span class="src-sym">}</span></div></li>
<li><div class="src-line">&nbsp;</div></li>
<li><div class="src-line"><span class="src-php">?&gt;</span></div></li>
</ol></div></span><span><a name="developmode"></a><h2 class="title">Develop mode</h2><p>When develop mode is enabled some settings optimized for developing will be set:</p>
    <p><ul><li><p>Smarty's <a href="http://www.smarty.net/manual/en/variable.force.compile.php">force_compile</a> option set to true</p></li>
        <li><p>logs turned on</p></li>
        <li><p>error reporting set to E_ALL</p></li>
        <li><p>plugins are registered on every request</p></li>
        <li><p>$_SESSION['psa_plugins'] value is always retrieved from the database (this session variable holds data about registered plugins).</p></li>
        <li><p>some information about each request will be available through <a href="../psa/Psa_Registry.html">Psa_Registry</a> object. This information can be nicely shown on web page by including html code that returns <a href="../psa/_scripts---functions.php.html#functionpsa_request_info_html">psa_request_info_html()</a> function. It can be very useful for debugging and while developing.</p></li></ul></p>
    <p>Develop mode can be enabled or disabled in the main configuration file <a href="../psa/_config.php.html">config.php</a>. On production site it must be disabled.</p></span><span><a name="requestinfo"></a><h2 class="title">Request info</h2><p>While application develop and debugging, some information about request can be shown like all plugins that are called, plugin methods arguments, <a href="../psa/Psa_Result.html">Psa_Result</a> object, logs, some global PHP arrays. See documentation for <a href="../psa/_scripts---functions.php.html#functionpsa_request_info_html">psa_request_info_html()</a> function. This information can speed up develop process and you will have nice overview what is going on within your application. Here is an example how looks request info returned by <a href="../psa/_scripts---functions.php.html#functionpsa_request_info_html">psa_request_info_html()</a> function:</p>
    <img src = "../../tutorials/psa/request_info.jpg"/>
    <p>You can see the request information in the <a href="http://karmela.fsb.hr/~bmauser/phpstartapp/app2">demo application</a>.</p></span></div>

	<table class="tutorial-nav-box">
	<tr>
		<td style="width: 30%">
							<a href="../psa/tutorial_psa.pkg.html"><img src="../media/images/previous_button.png" alt="Previous"></a>
					</td>
		<td style="text-align: center">
					</td>
		<td style="text-align: right; width: 30%">
							<a href="../psa/tutorial_psa_quick_start.pkg.html"><img src="../media/images/next_button.png" alt="Next"></a>
					</td>
	</tr>
	<tr>
		<td style="width: 30%">
							<span class="detail">Preface</span>
					</td>
		<td style="text-align: center">
					</td>
		<td style="text-align: right; width: 30%">
							<span class="detail">Quick Start</span>
					</td>
	</tr>
</table>
	
	<p class="notes" id="credit">
		Documentation generated on Thu, 21 Oct 2010 01:40:46 +0200 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
	</p>
	</div></body>
</html>